package theorie;

public class AlleBiber{
  public static final char[] SIGMA={' ', '1'};

  /*Erzeugt alle möglichen TM mit den Anforderungen eines Bibers:
   - Nur zwei Zeichen im Alphabet: " " und "1"
   - Von jedem Zustand gibt es je einen Übergang mit jedem der beiden Zeichen,
     damit die entsprechende TM nicht stecken bleiben kann.
   - n ist die Anzahl der Nicht-Endzustände
   - 0 ist der Endzustand, 1 ist der Startzustand
  */
  public static void main(String[] args){
    int max=Integer.parseInt(args[0]); // Anzahl der Nicht-Endzustände
    regelnab(max, "", 1);
    System.out.println("#Das waren "+(int)(Math.pow(4*max+4, 2*max))+" Biber-TM.");
  }

  public static void regelnab(int max, String vorher, int von){
    if(von>max) System.out.println(vorher);
    else{
      for(int nachleer=0; nachleer<=max; nachleer++)
        for(int nacheins=0; nacheins<=max; nacheins++){
          regelnab(max, vorher+von+".  R"+nachleer+","+von+".1 R"+nacheins+",", von+1);
          regelnab(max, vorher+von+".  L"+nachleer+","+von+".1 R"+nacheins+",", von+1);
          regelnab(max, vorher+von+".  R"+nachleer+","+von+".1 L"+nacheins+",", von+1);
          regelnab(max, vorher+von+".  L"+nachleer+","+von+".1 L"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1R"+nachleer+","+von+".11R"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1L"+nachleer+","+von+".11R"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1R"+nachleer+","+von+".11L"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1L"+nachleer+","+von+".11L"+nacheins+",", von+1);
          regelnab(max, vorher+von+".  R"+nachleer+","+von+".11R"+nacheins+",", von+1);
          regelnab(max, vorher+von+".  L"+nachleer+","+von+".11R"+nacheins+",", von+1);
          regelnab(max, vorher+von+".  R"+nachleer+","+von+".11L"+nacheins+",", von+1);
          regelnab(max, vorher+von+".  L"+nachleer+","+von+".11L"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1R"+nachleer+","+von+".1 R"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1L"+nachleer+","+von+".1 R"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1R"+nachleer+","+von+".1 L"+nacheins+",", von+1);
          regelnab(max, vorher+von+". 1L"+nachleer+","+von+".1 L"+nacheins+",", von+1);
        }
    }
  }
}

